package net.huashitong.ssydt.provider.user.service;


import net.huashitong.ssydt.user.entity.vo.*;
import net.huashitong.user.results.UserPlain;
import net.huashitong.user.vo.ThirdLoginVO;
import net.huashitong.user.vo.ThirdRegisterInVO;
import net.huashitong.user.vo.UserLoginVO;

import javax.servlet.http.HttpServletRequest;

/**
 * @author huiyang.yu
 */
public interface UserService {

    /**
     * 执行登录
     *
     * @param loginInVO 登录参数对象
     * @param request
     */
    LoginOutVO login(LoginInVO loginInVO, HttpServletRequest request);
    /**
     * 执行登录（shiro使用）
     *
     *
     *
     */
    LoginOutVO login(UserLoginVO userLoginVO);

    /**
     * 手机号注册
     *
     * @param registerVO
     */
    void register(RegisterVO registerVO);

    /**
     * 发送短信验证码
     *
     * @param smsVo
     * @param verification
     */
    void sms(SmsVo smsVo, boolean verification);

    /**
     * 发送修改密码短信验证码
     *
     * @param userId
     */
    void smsMy(String userId);

    /*
     * 读取用户信息
     *
     * @param userId 用户ID
     * @return UserOutVO 用户信息
     */
    UserOutVO getByUserId(String userId);

    /**
     * 用户更新
     *
     * @param userId   用户ID
     * @param userInVO 请求参数
     */
    void updateUser(String userId, UserInVO userInVO);

    /**
     * 获取用户第三方平台的绑定信息列表
     *
     * @param userId 用户ID
     * @return 用户第三方平台的绑定信息列表
     */
    BindingsState getMyBindings(String userId);

    /**
     * 验证手机号是否注册
     *
     * @param mobile
     * @return
     */
    IsRegisterVO mobileIsRegister(String mobile);

    /**
     * 发送语音验证码
     *
     * @param mobile
     * @param verification
     */
    void sound(SmsVo mobile, boolean verification);

    /**
     * 发送修改密码语音验证码
     *
     * @param userId
     */
    void soundMy(String userId);

    /**
     * 微信登录
     *
     * @param loginWechatVO
     */
    LoginOutVO loginWechat(LoginWechatVO loginWechatVO, HttpServletRequest request);

    /**
     * 绑定微信
     *
     * @param bindingWeChatVO
     */
    void bindingWeChat(BindingWeChatVO bindingWeChatVO);

    /**
     * 解绑微信
     *
     * @param userId
     */
    void deleteWeChat(String userId);

    /**
     * QQ登录
     *
     * @param loginQqVO
     * @return
     */
    LoginOutVO loginQq(LoginQqVO loginQqVO, HttpServletRequest request);

    /**
     * 绑定QQ
     *
     * @param bindingQqVO
     */
    void bindingQq(BindingQqVO bindingQqVO);

    /**
     * 解绑QQ
     *
     * @param userId
     */
    void deleteQq(String userId);

    /**
     * 微博登录
     *
     * @param loginWeiboVO
     * @return
     */
    LoginOutVO loginWeibo(LoginWeiboVO loginWeiboVO, HttpServletRequest request);

    /**
     * 绑定微博
     *
     * @param bindingWeiboVO
     */
    void bindingWeibo(BindingWeiboVO bindingWeiboVO);

    /**
     * 解绑微博
     *
     * @param userId
     */
    void deleteWeibo(String userId);

    /**
     * 变更(绑定)手机
     *
     * @param userId
     * @param mobileVO
     */
    void mobileMy(String userId, MobileVO mobileVO);

    /**
     * 修改密码
     *
     * @param passwordVO
     */
    void password(PasswordVO passwordVO);

    /**
     * 重置密码
     *
     * @param userId
     * @param passwordMyVO
     */
    void passwordMy(String userId, PasswordMyVO passwordMyVO);

    /**
     * 三方帐号注册
     *
     * @param registerThirdAccount
     */
    void registerThirdAccount(RegisterThirdAccount registerThirdAccount);

    SimpleUserVO getSimpleUser(String userId);

    //g根据unionid  取userid
    String getByThirdAccountWithToken(String thirdAccount, String token);

    /**
     * 第三方帐号注册
     *
     * @param thirdRegisterInVO
     */
    public void thirdRegister(ThirdRegisterInVO thirdRegisterInVO);

    /*
      第三登入（公众号使用）
     */
    public UserPlain thirdLogin(ThirdLoginVO thirdLoginVO);
}
